import { computed } from 'vue';
import { useUserStore } from '@/store/modules/user';

export function useRole() {
	const userStore = useUserStore();
	const roleList = computed(() => userStore.getRoles);

	/**
	 * 检查角色
	 * @param Array accesses
	 */

	function _someRoles(accesses) {
		return roleList.value.some((item) => {
			return accesses.includes(item);
		});
	}

	/**
	 * 判断是否存在角色
	 * 可用于 v-if 显示逻辑
	 * */
	function hasRole(accesses) {
		if (!accesses || !accesses.length) return true;
		return _someRoles(accesses);
	}

	// 将重复的数组检查逻辑提取到一个函数中
	function checkArray(accesses, errorInfo) {
		if (Array.isArray(accesses)) {
			return true;
		}
		throw new Error(`[${errorInfo}]: ${accesses} should be a array !`);
	}

	/**
	 * 是否包含指定的所有角色
	 * @param Array accesses
	 */
	function hasEveryRole(accesses) {
		checkArray(accesses, 'hasEveryRole');
		return roleList.value.every((access) => accesses.includes(access.value));
	}

	/**
	 * 是否包含其中某个角色
	 * @param accesses
	 * @param accessMap
	 */
	function hasSomeRole(accesses) {
		checkArray(accesses, 'hasSomeRole');
		return roleList.value.some((access) => accesses.includes(access.value));
	}

	return { hasRole, hasEveryRole, hasSomeRole };
}
